import _import from "@/router/_import"; // 获取组件的方法 // 测试记得注销此行

// 过滤后端传过来的路由表

// function generaMenu(asyncRouterMap) { // 测试用

export function generaMenu(asyncRouterMap) { // 测试记得注销此行

  // 遍历后台传来的路由字符串，转换为组件对象
  const accessedRouters = asyncRouterMap.filter(route => {

    // 删除不需要的参数
    delete route.id;
    delete route.label;
    delete route.parent_id;
    delete route.sort;

    // meta属性是对象，这里面不能做构造函数，没有该属性会报错
    // 数据库拿过来是字符串，需要转成对象类型
    route.meta = JSON.parse(route.meta);
    route.meta.title = route.title;
    route.meta.icon = route.icon;
    delete route.icon;
    delete route.title;
    // 必须填的
    route.name = route.name;
    route.path = route.path;

    if (route.component) {
      if (route.component === "Layout") {
        // Layout组件特殊处理
        // route.component = "Layout"; // 测试用
        route.component = _import("Layout"); // 测试记得注销此行
      } else {
        // route.component = route.component; // 测试用
        route.component = _import(route.component); // 测试记得注销此行
      }
    } else {
      route.component = "";
    }

    // alwaysShow 1 -> 打开, 0 -> 关闭
    if (route.alwaysShow === 1) {
      route.alwaysShow = true;
    } else {
      route.alwaysShow = false;
    }

    // redirect 1 -> 不允许重定向, 2 -> 重定向路径
    if (route.redirect === "1") {
      route.redirect = "noRedirect";
    } else {
      // route.redirect = route.redirect; //（错误）重定向路径递归溢出堆栈（错误）
      route.redirect = ""; // 运行正确（待优化）
    }

    // hidden 1 -> 隐藏, 2 -> 不隐藏
    if (route.hidden === 1) {
      route.hidden = true;
    } else {
      route.hidden = false;
    }

    // noCache 1 -> true，将不缓存页面，默认为 0 -> false
    if (route.noCache === 1) {
      route.meta.noCache = true;
      delete route.noCache;
    } else {
      route.meta.noCache = false;
      delete route.noCache;
    }

    // 如果有子路由，就继续递归
    if (route.children && route.children.length) {
      route.children = generaMenu(route.children);
    }

    return true; // 递归出口（结束）
  });

  //  console.log(accessedRouters); // 输出测试

  return accessedRouters; // 返回递归出来的路由
}

// generaMenu(routers) // 执行测试
